package gui.ajuda;

import conexao.Http;
import conexao.HttpData;
import conexao.HttpListener;
import java.io.DataInputStream;
import javax.microedition.lcdui.*;
import recados.Recados;

public class Reportar extends Form implements CommandListener, HttpListener {

    private final Recados midlet;
    private final Command cmdVoltar;
    private final Command cmdEnviar;
    private final TextField campoErro;

    public Reportar(Recados midlet) {
        super("Reportar Bug");

        this.midlet = midlet;

        cmdVoltar = new Command("Voltar", Command.BACK, 0);
        cmdEnviar = new Command("Enviar", Command.OK, 1);

        String mensagem = "Conte aqui se você encontrou algum problema no aplicativo, ou de sua opinião. E ajude a melhora-lo.";

        append(mensagem);

        campoErro = new TextField("Mensagem:", null, 500, TextField.ANY);

        addCommand(cmdVoltar);
        addCommand(cmdEnviar);

        append(campoErro);

        setCommandListener(this);
    }

    public void commandAction(Command c, Displayable d) {
        if (c == cmdVoltar) {
            midlet.setCurrent(new Ajuda());
        } else if (c == cmdEnviar) {
            if (campoErro.getString().length() > 0) {
                run();
            } else {
                Recados.setCurrent(new Alert("Erro", "Preencha o campo", null, AlertType.ERROR));
            }
        }
    }

    public void run() {
        Http http = new Http("Enviando");

        HttpData dados = new HttpData();
        dados.setPagina("/reportar_bug.php");

        dados.put("nome", midlet.getLoginConfig().getNome());
        dados.put("bug", campoErro.getString());

        http.setHttpData(dados);

        http.setListener(this);

        Recados.setCurrent(http);

        http.doPost(false);
    }

    public void requisicaoCancelada() {
        Recados.setCurrent(this);
    }

    public void falhaRequisiçao(String mensagem) {
        Recados.setCurrent(new Alert("Erro", mensagem, null, AlertType.ERROR), this);
    }

    public void requisicaoConcluida(DataInputStream in) {
        String primeiraLinha = Http.readLine(in);
        String segundaLinha = Http.readLine(in);
        if (primeiraLinha.equals("erro")) {
            Recados.setCurrent(new Alert("Erro", segundaLinha, null, AlertType.ERROR), this);
        } else if (primeiraLinha.equals("ok")) {
            campoErro.setString("");
            Recados.setCurrent(new Alert("Erro", segundaLinha, null, AlertType.ERROR), new Ajuda());
        }
    }
}
